package sword.offer;

/**
 * 输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数在数组的前半部分，所有偶数在数组的后半部分
 *
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class TwentyOne {
    /**
     * 利用双指针，第一个指针指向数组的第一个元素， 第二个指针指向末尾元素
     * 第一个指针的任务是从左到右找到偶数
     * 第二个指针的任务是从右到左找到奇数
     * 然后当第一个指针停留在偶数  第二个指针停留在奇数 那么两者交换
     */
    class Solution {
        public int[] exchange(int[] nums) {
            int first = 0;
            int last = nums.length - 1;
            while (first < last) {
                while (first < last && nums[first] % 2 != 0) {
                    first++;
                }
                while (first < last && nums[last] % 2 == 0) {
                    last--;
                }
                int t = nums[last];
                nums[last] = nums[first];
                nums[first] = t;
            }
            return nums;
        }
    }
}
